#include <stdint.h>

int main(void) {
  // 给某个类型起别名
  typedef int name;
  typedef unsigned char BYTE;
  BYTE c = 'z';
  typedef int antelope, bagel, mushroom;
  typedef int* intptr;
  int a = 10;
  intptr x1 = &a;
  typedef int five_ints[5];
  five_ints x2 = {11, 22, 33, 44, 55};
  typedef signed char (*fp) (void);
  // 1.代码可读性
  typedef char* STRING;
  STRING name1;
  struct treenode {
    //
  };
  typedef struct treenode* Tree;
  // 和 strcut 写在一起
  typedef struct animal {
    char* name;
    int leg_count,speed;
  } animal;
  // 直接省略
  typedef struct {
    char *name;
    int leg_count, speed;
  } animal1;
  // 为以后的变量改类型
  typedef float app_float;
  app_float f1,f2,f3;
  // 可移植性
  int i1 = 100000;
  // 不同计算机不同类型
  int32_t i2 = 100000;
  // 类似的定义
  // typedef long int ptrdiff_t;
  // typedef unsigned long int size_t;
  // typedef int wchar_t;
  // 简化类型声明
  char (*(*x(void))[5])(void);
  // 类型别名
  typedef char (*Func)(void);
  Func (*x(void))[5];
  // 再次简化
  typedef char (*Func)(void);
  typedef Func Arr[5];
  Arr* x(void);
  
  return 0;
}